#ifndef QUEUE_H
#define QUEUE_H

#include "linkedlist.h"

/* Queue representa una estructura de datos tipo FIFO (primero en entrar, primero en salir) */

template<class T>
class Queue
{
public:
	/* agrega un elemento al principio de la cola */
	void enqueue(T data);
	/* elimina y retorna el elemento al final de la cola */
    T dequeue();

    int size();
private:
    LinkedList<T> linkedList;
};

template<class T>
void Queue<T>::enqueue(T data)
{
    linkedList.addFirst(data);
}

template<class T>
T Queue<T>::dequeue()
{
	if(size() == 0)
		return T();

    T data = linkedList.getLast()->getData();

    linkedList.removeLast();

	return data;
}

template<class T>
int Queue<T>::size()
{
    return linkedList.size();
}

#endif // QUEUE_H
